// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/common/android/media_metadata_android.h"

#include <string>
#include <vector>

#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "content/public/common/media_metadata.h"
#include "jni/MediaMetadata_jni.h"

using base::android::ScopedJavaLocalRef;

namespace content {

namespace {

    std::vector<int> GetFlattenedSizeArray(const std::vector<gfx::Size>& sizes)
    {
        std::vector<int> flattened_array;
        flattened_array.reserve(2 * sizes.size());
        for (const auto& size : sizes) {
            flattened_array.push_back(size.width());
            flattened_array.push_back(size.height());
        }
        return flattened_array;
    }

} // anonymous namespace

// static
base::android::ScopedJavaLocalRef<jobject>
MediaMetadataAndroid::CreateJavaObject(
    JNIEnv* env, const MediaMetadata& metadata)
{
    ScopedJavaLocalRef<jstring> j_title(
        base::android::ConvertUTF16ToJavaString(env, metadata.title));
    ScopedJavaLocalRef<jstring> j_artist(
        base::android::ConvertUTF16ToJavaString(env, metadata.artist));
    ScopedJavaLocalRef<jstring> j_album(
        base::android::ConvertUTF16ToJavaString(env, metadata.album));

    ScopedJavaLocalRef<jobject> j_metadata = Java_MediaMetadata_create(env, j_title, j_artist, j_album);

    for (const auto& image : metadata.artwork) {
        std::string src = image.src.spec();
        ScopedJavaLocalRef<jstring> j_src(
            base::android::ConvertUTF8ToJavaString(env, src));
        ScopedJavaLocalRef<jstring> j_type(
            base::android::ConvertUTF16ToJavaString(env, image.type));
        ScopedJavaLocalRef<jintArray> j_sizes(
            base::android::ToJavaIntArray(env, GetFlattenedSizeArray(image.sizes)));

        Java_MediaMetadata_createAndAddMediaImage(env, j_metadata, j_src, j_type,
            j_sizes);
    }

    return j_metadata;
}

} // namespace content
